package com.webwork.common.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;

/**
 * list工具类
 *
 */
public class ListUtil {

	/**
	 * 获取子串
	 * @param list
	 * @param page
	 * @param rows
	 * @return
	 */
	public static List<?> subList(List<?> list, int page, int rows) {
		if (CollectionUtils.isEmpty(list))
			return list;
		
		if (!(list instanceof List<?>))
			return null;
		
		//不分页
		if (0 == page || 0 == rows)
			return list;
		
		//总条数
		int size = list.size();
		//可分的页数
		int count = size / rows;
		int remain = size % rows;
		count = (remain > 0)? ++count : count;
		//查询页数大于可分的页数
		if (page > count)
			return null;
		//最后返回的subList
		List<?> subList = null;
		if (page * rows > size)
			subList = list.subList((page - 1) * rows, size);
		else
			subList = list.subList((page - 1) * rows, page * rows);
		//返回子串
		return subList;
	}
	
	/**
	 * 将一个List均分成n个list,主要通过偏移量来实现的
	 *
	 * @param source    源集合
	 * @param listCount 需要分开多少组
	 * @param eachSize 每组需要的数量
	 * @return
	 */
	public static <T> List<List<T>> averageList(List<T> source, int eachSize) {
		if (null == source || source.isEmpty()) {
			return Collections.emptyList();
		}
		// 需要分开多少组
		int listCount = (int)Math.ceil((MathUtil.div(source.size(), eachSize)));		
		List<List<T>> result = new ArrayList<>();
		int offset = 0;// 偏移量
		for (int i = 0; i < listCount; i++) {
			List<T> value;
			// 如果是最后一次 把剩下的都给他
			if (i == listCount - 1) {
				value = source.subList(i * eachSize + offset, source.size());
			} else {
				value = source.subList(i * eachSize + offset, (i + 1) * eachSize + offset);
			}
			result.add(value);
		}
		return result;
	}
}
